<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
  // 数组方法3

  // 15. map方法
  // 和 forEach 类似，只不过可以对数组中的每一项进行操作，返回一个新的数组
  // 返回值：是一个新数组, 并且和原始数组长度一致
    // - 新数组内每一个数据都是根据原始数组中每一个数据映射出来的
    // - 映射条件以 return 的形式书写

  // var arr = [1,2,3,4,5];
  // var newArr = arr.map(function(item, index) {
  //   return item * 2;
  // })
  // console.log(newArr);

  // var arr = [
  //   {
  //     name: "qibing",
  //     score: 70,
  //   },
  //   {
  //     name: "wenjie",
  //     score: 71,
  //   },
  //   {
  //     name: "yunpeng",
  //     score: 80,
  //   },
  //   {
  //     name: "yongcheng",
  //     score: 72,
  //   }
  // ]
  // var newArr = arr.map(function(item) {
  //   return {...item, level: item.score >= 80 ? "优秀": "及格"}
  // })
  // console.log(newArr);







  // 16. filter方法
  // 作用：和 map 的使用方式类似(也会做遍历)，按照我们的条件来筛选数组(过滤)
  // 不会改变原数组
  // 会返回一个新数组
  // var arr = [1,6,9,3,6,4,8];
  // var newArr = arr.filter(function(item, index, arr) {
  //   return item > 5;
  // });
  // console.log(newArr);

  // var arr = [
  //   {
  //     name: "qibing",
  //     score: 70,
  //   },
  //   {
  //     name: "wenjie",
  //     score: 71,
  //   },
  //   {
  //     name: "yunpeng",
  //     score: 80,
  //   },
  //   {
  //     name: "yongcheng",
  //     score: 92,
  //   }
  // ]
  // var newArr = arr.filter(function(item) {
  //   return item.score >= 80;
  // })
  // console.log(newArr);
  







  // 17. every方法
  // 作用：判断数组中是不是每一个数据都满足条件
  // 不会改变原数组
  // 返回值的一个布尔值
  // var arr = [1,2,3,4,5];
  // var result = arr.every(function(item, index, arr) {
  //   return item > 2;
  // })
  // console.log(result);

  // var arr = [
  //   {
  //     name: "qibing",
  //     score: 70,
  //   },
  //   {
  //     name: "wenjie",
  //     score: 51,
  //   },
  //   {
  //     name: "yunpeng",
  //     score: 80,
  //   },
  //   {
  //     name: "yongcheng",
  //     score: 92,
  //   }
  // ]
  // var result = arr.every(function(item) {
  //   return item.score >= 60;
  // })
  // console.log(result);






  // 18. some方法
  // 作用：判断数组中是不是有某一个满足条件
  // 不会改变原数组
  // 返回值的一个布尔值
  // var arr = [1,2,3,4,5];
  // var result = arr.some(function(item) {
  //   return item > 6;
  // })
  // console.log(result);






  // 19. reduce方法
  // 作用：进行叠加累计，函数根据数组中的成员进行重复调用
  // 最常见的就是用来做累加累乘
  // 不会改变原数组
  // 返回一个结果

  // var arr = [1,2,3,4,5];
  // var result = arr.reduce(function(prev, item) {
  //   return prev += item;
  // }, 0)
  // console.log(result);
  // var result = arr.reduce(function(prev, item) {
  //   return prev *= item;
  // }, 1)
  // console.log(result);

  // var arr = [
  //   {
  //     productName: "🍉",
  //     count: 5,
  //     weight: 10,
  //   },
  //   {
  //     productName: "🍎",
  //     count: 3,
  //     weight: 5,
  //   },
  //   {
  //     productName: "🍌",
  //     count: 7,
  //     weight: 6,
  //   }
  // ]
  // for (var i = 0, total = 0; i < arr.length; i++) {
  //   total += arr[i].count * arr[i].weight
  // }
  // console.log(total);

  // var total = 0;
  // arr.forEach(function(item) {
  //   total += item.count * item.weight
  // })
  // console.log(total);

  // var result = arr.reduce(function(total, item) {
  //   return total += item.count * item.weight
  // }, 0)
  // console.log(result);








  // 20. find方法
  // 作用：查找数组中某一个数据(满足条件的第一个元素)
  // 不会改变原数组的
  // 返回值：数组中你查找到的该数据。
  // 如果一个都不满足，返回undefined
  // var arr = [1,2,3,4,5];
  // var result = arr.find(function(item) {
  //   return item > 7
  // })
  // console.log(result);






  
  // 21. findIndex
  // 作用：查找数组中某一个数据(第一个)
  // 不会改变原数组
  // 返回值：数组中你查找到的该数据所在的索引位置。
  // 一个都没找到返回-1
  // var arr = [0,0,0,1,2,3,4,5];
  // var result = arr.findIndex(function(item) {
  //   return item > 9;
  // })
  // console.log(result);
</script>